home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / bin / charset < prev    next >
Encoding:
Text File  |  2007-01-22  |  2.4 KB  |  170 lines

  1. #!/bin/sh
  2.  
  3. usage()
  4. {
  5.     echo >&2 "Usage: $(basename $0) [-v] [--tty=<device>] G0|G1 [cp437|iso01|vt100|user|<acm_name>]"
  6. }
  7.  
  8. usage_exit()
  9. {
  10.     usage
  11.     exit 1
  12. }
  13.  
  14. tty_out()
  15. {
  16.     /bin/echo -en >&3 $*
  17. }
  18.  
  19. verbose()
  20. {
  21.     test $VERBOSE = 1 && echo >&2 $*
  22. }
  23.  
  24. error()
  25. {
  26.     echo >&2 $*
  27. }
  28.  
  29. activate_charset()
  30. {
  31.     verbose "Switching to $1 charset"
  32.     case $1 in
  33.     G0)
  34.     tty_out "\017"
  35.     ;;
  36.     G1)
  37.     tty_out "\016"
  38.     ;;
  39.     esac
  40. }
  41.  
  42. # parse command-line
  43.  
  44. CHARSET=
  45. ACM=
  46. INTERNAL_ACM=
  47. ACM_NAME=
  48. TTY=/dev/tty
  49.  
  50. VERBOSE=0
  51.  
  52. GOT_CHARSET=0
  53. GOT_ACM=0
  54.  
  55. while [ $# -gt 0 ]
  56. do
  57.     case $1 in
  58.     -v)
  59.     VERBOSE=1
  60.     shift
  61.     ;;
  62.     --tty)
  63.     TTY=$2
  64.     shift
  65.     shift
  66.     ;;
  67.     --tty=*)
  68.     TTY=${1#--tty=}
  69.     shift
  70.     ;;
  71.     G0|G1)
  72.     test ${GOT_CHARSET} = 1 && usage_exit
  73.     CHARSET=$1
  74.     GOT_CHARSET=1
  75.     shift
  76.     ;;
  77.     iso01)
  78.     test ${GOT_ACM} = 1 && usage_exit
  79.     INTERNAL_ACM=B
  80.     ACM_NAME=$1
  81.     GOT_ACM=1
  82.     shift
  83.     ;;
  84.     vt100)
  85.     test ${GOT_ACM} = 1 && usage_exit
  86.     INTERNAL_ACM=0
  87.     ACM_NAME=$1
  88.     GOT_ACM=1
  89.     shift
  90.     ;;
  91.     cp437)
  92.     test ${GOT_ACM} = 1 && usage_exit
  93.     INTERNAL_ACM=U
  94.     ACM_NAME=$1
  95.     GOT_ACM=1
  96.     shift
  97.     ;;
  98.     user)
  99.     test ${GOT_ACM} = 1 && usage_exit
  100.     INTERNAL_ACM=K
  101.     ACM_NAME="user-defined"
  102.     GOT_ACM=1
  103.     shift
  104.     ;;
  105.     *)
  106.     test ${GOT_ACM} = 1 && usage_exit
  107.     INTERNAL_ACM=K
  108.     ACM_NAME="user-defined"
  109.     ACM=$1
  110.     GOT_ACM=1
  111.     shift
  112.     ;;
  113.     esac
  114. done
  115.  
  116. # open requested tty
  117. test -c "$TTY" && exec 3<>$TTY
  118.  
  119. # if specified ACM is not available internally, get it from file
  120. if [ "$ACM" != "" ]
  121. then
  122.     case $CHARSET in
  123.     G0)
  124.     OPT=
  125.     ;;
  126.     G1)
  127.     OPT=--g1
  128.     ;;
  129.     esac
  130.     
  131.     verbose -n "Loading $ACM ACM into user-defined slot..."
  132.     consolechars $OPT --tty=${TTY} -m $ACM && verbose "done."
  133. fi
  134.  
  135. if [ "$INTERNAL_ACM" -a "$CHARSET" ]
  136. then # make $CHARSET point to $INTERNAL_ACM
  137.     if [ "$TTY" ]
  138.     then
  139.     ONTTY=" on $TTY"
  140.     else
  141.     ONTTY=""
  142.     fi
  143.     
  144.     if [ "$ACM" ]
  145.     then
  146.     verbose "Making ${CHARSET}${ONTTY} point to $ACM_NAME ACM (file $ACM)"
  147.     else
  148.     verbose "Making ${CHARSET}${ONTTY} point to internal ACM $ACM_NAME"
  149.     fi
  150.     case $CHARSET in
  151.     G0)
  152.     tty_out "\033($INTERNAL_ACM"
  153.     ;;
  154.     G1)
  155.     tty_out "\033)$INTERNAL_ACM"
  156.     ;;
  157.     esac
  158.     activate_charset $CHARSET
  159. elif [ "$CHARSET" -a -z "$INTERNAL_ACM" ]
  160. then # make $CHARSET current
  161.     activate_charset $CHARSET
  162. elif [ "$INTERNAL_ACM" -a -z "$CHARSET" ]
  163. then # set current charset to $ACM
  164.     error "Don't know (yet ?) how to determine current charset."
  165.     error "Please specify G0 or G1"
  166.     exit 1
  167. else
  168.     usage
  169. fi
  170.